[BCB]Zegar na aktywnym oknie
Krecik
Poniższy kod wyświetla zegarek na pasku tytułu aktywnego okna...
Jest w nim kilka błędów:
a) Czyszczenie tła pod znakami polega na powtórzeniu Windowsowego gradientu (tzn. nie będzie działało z blindsem, Xp Loona itp...)
b) Parametry (położenie) zegarka walnąłem 'na oko' na podstawie moich ustawień systemowych
Ale w końcu chodzi tylko o przykład:), najlepiej wrzucić to do jakiegoś TTimer`a :
TCanvas *Cnv; //Canvas
Cnv = new TCanvas;
HWND hwnd = GetForegroundWindow(); //uchwyt do aktywnego okna
Cnv->Handle = GetWindowDC(hwnd); //przekazanie regionu do Canvy
Cnv->Brush->Style = bsClear; //przezroczyste brush Canvy, by nie było tła pod napisem
TRect Rect = Cnv->ClipRect; //pobranie wielkości okna
Rect.Right = Rect.Right - Rect.Left;
Rect.Bottom = Rect.Bottom - Rect.Top;
Rect.Left = 0;
Rect.Top = Rect.Left;
Cnv->Font->Color = 0xFFFFFF; //ustawienie koloru czcionki
//tu wczytujemy datę / godzinę - co na sie podoba:)
TDateTime Teraz = TDateTime::CurrentTime();
String text = Teraz.FormatString("hh:nn:ss");
int width = Cnv->TextWidth(text); //szerokość wypisywanego textu
//Bardzo dziwny kod :) czyszczący pole pod napisem na podstawie tego co jest wyżej na pasku :):
for(int i=Rect.Right-width-65; i<Rect.Right-65; i++)
{
TColor Clr = Cnv->Pixels[i][5];
Cnv->Pen->Color = Clr;
Cnv->MoveTo(i,5);
Cnv->LineTo(i,5+Cnv->TextHeight(text));
}
Cnv->TextOutA(Rect.Right-width-65,6,text);//parametry walnąłem na oko i na różnych systemach mogą być różne, ale w końcu chodzi tylko o przykład:)
ReleaseDC(hwnd, Cnv->Handle); //'wypuszcza' Region (nie wiem jak to nazwać po 'fachowemu' :)
ReleaseDC(hwnd, Handle);
delete Cnv; //i zwalniamy pamięć
PS> Trochę 'namotane' to dlatego, że pisane w kawałku wolnej chwili... Efekt najlepiej wychodzi na pasku zadań :)